热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

萤火虫|数目_matlab改进萤火虫算法求解路径优化VRP

篇首语:本文由编程笔记#小编为大家整理,主要介绍了matlab改进萤火虫算法求解路径优化VRP相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了matlab改进萤火虫算法求解路径优化VRP相关的知识,希望对你有一定的参考价值。


tic
clear
clc
%% 导入订单数据和各个储位物品的重量数据
load orders.mat orders
load item_weight.mat item_weight
%% 仓库参数初始化
depot_leftAisle=1.5; %仓库与第1条拣选通道的距离,1.5LU
enter_leave_aisle=1; %从通道进入拣选通道或从拣选通道进入通道需要行走的距离,1LU
adjacent_location=1; %同一条拣选通道的两个相邻储位之间的距离,1LU
adjacent_aisle=5; %两个相邻拣选通道的距离,5LUs
aisle_num=10; %拣选通道数目
side_num=15; %每条拣选通道一侧的储位数目
capacity=100; %设备最大装载量,单位kg
%% 订单数据数据初始化
orders_num=20; %订单数目
batches_maxnum=10; %允许分批的最大数目
%% 萤火虫算法参数初始化
MAXGEN=100; %最大迭代次数
NIND=50; %萤火虫数目
N=batches_maxnum+orders_num-1; %编码长度
alpha=2000; %违反设备装载量约束的惩罚因子
gama=0.95; %光吸收系数
%% 初始化
Population=init_pop(NIND,N); %随机初始化
best_firefly=Population(1,:); %初始全局最优
[batches,batches_num,bestTD,violate_batch,violate_order]=decode(best_firefly,orders,batches_maxnum,orders_num,capacity,item_weight,...
side_num,depot_leftAisle,enter_leave_aisle,adjacent_location,adjacent_aisle);
disp(['初始订单分批数目:',num2str(batches_num),',总行驶距离:',num2str(bestTD),...
',违反约束订单分批数目:',num2str(violate_batch),',违反约束订单数目:',num2str(violate_order)]);
best_cost=cost_function(batches,orders,item_weight,capacity,side_num,depot_leftAisle,...
enter_leave_aisle,adjacent_location,adjacent_aisle,alpha); %初始全局最优分批方案的总行驶距离
Best_Cost=zeros(MAXGEN,1); %记录每一次迭代全局最优总距离
Best_TD=zeros(MAXGEN,1); %记录每一次迭代全局最优总距离
%% 主循环
gen=1;
while gen<&#61;MAXGEN
%% 计算种群目标函数值
Obj&#61;obj_function(Population,orders,batches_maxnum,orders_num,capacity,item_weight,...
side_num,depot_leftAisle,enter_leave_aisle,adjacent_location,adjacent_aisle,alpha);
%% 更新萤火虫位置
for i&#61;1:NIND
Individual1&#61;Population(i,:); %第i个萤火虫
for j&#61;1:NIND
Individual2&#61;Population(j,:); %第j个萤火虫
%如果第j个萤火虫发光强度更大&#xff0c;则需要将第i个萤火虫向第j个萤火虫靠近
if Obj(j,1)<Obj(i,1)
rij&#61;cal_rij(Individual1,Individual2); %计算两个萤火虫之间的距离
cross_len&#61;randi([1,ceil(rij*gama^gen)],1,1); %计算交叉片段长度
[Individual1,Individual2]&#61;crossover(Individual1,Individual2,cross_len); %交叉操作&#xff0c;得到新的第i个萤火虫
newObj1&#61;obj_function(Individual1,orders,batches_maxnum,orders_num,capacity,item_weight,...
side_num,depot_leftAisle,enter_leave_aisle,adjacent_location,adjacent_aisle,alpha);%交叉后得到的新萤火虫
if newObj1<Obj(i,1)
Population(i,:)&#61;Individual1; %更新新种群第i个萤火虫位置
Obj(i,1)&#61;newObj1;
%更新新种群中第i个萤火虫的目标函数值
end
end
end
end
%% 从更新后的Population中选择目标函数值在前10%的个体
offspring&#61;select(Population,orders,batches_maxnum,orders_num,capacity,item_weight,...
side_num,depot_leftAisle,enter_leave_aisle,adjacent_location,adjacent_aisle,alpha);
%% 局部搜索
offspring&#61;local_search(offspring,orders,batches_maxnum,orders_num,capacity,item_weight,alpha,...
side_num,depot_leftAisle,enter_leave_aisle,adjacent_location,adjacent_aisle);
%% 将局部搜索后的offspring与原来的Population进行合并
Population&#61;merge(Population,offspring,Obj);
%% 找到全局最优的萤火虫
Obj&#61;obj_function(Population,orders,batches_maxnum,orders_num,capacity,item_weight,...
side_num,depot_leftAisle,enter_leave_aisle,adjacent_location,adjacent_aisle,alpha);
[min_Obj,min_index]&#61;min(Obj); %排在第1位的是最小目标函数值
if min_Obj<best_cost
best_firefly&#61;Population(min_index,:); %更新全局最优萤火虫
best_cost&#61;min_Obj;
end
Best_Cost(gen,1)&#61;best_cost; %记录每次迭代全局最优目标函数值
%% 打印
[best_batches,batches_num,bestTD,violate_batch,violate_order]&#61;decode(best_firefly,orders,batches_maxnum,orders_num,capacity,item_weight,...
side_num,depot_leftAisle,enter_leave_aisle,adjacent_location,adjacent_aisle);
disp([&#39;第&#39;,num2str(gen),&#39;代全局最优萤火虫订单分批数目&#xff1a;&#39;,num2str(batches_num),&#39;&#xff0c;总行驶距离&#xff1a;&#39;,num2str(bestTD),...
&#39;&#xff0c;违反约束订单分批数目&#xff1a;&#39;,num2str(violate_batch),&#39;&#xff0c;违反约束订单数目&#xff1a;&#39;,num2str(violate_order)]);
%% 记录全局最优总行走距离
Best_TD(gen,1)&#61;bestTD;
%% 计数器加1
gen&#61;gen&#43;1;
end
%% 输出优化过程图
figure;
plot(Best_TD,&#39;LineWidth&#39;,1);
title(&#39;优化过程&#39;)
xlabel(&#39;迭代次数&#39;);
ylabel(&#39;拣选总行走距离&#39;);
%% 将全局最优萤火虫解码为订单分批方案
[best_batches,best_num,bestTD]&#61;decode(best_firefly,orders,batches_maxnum,orders_num,capacity,item_weight,...
side_num,depot_leftAisle,enter_leave_aisle,adjacent_location,adjacent_aisle);
toc



最优解:
车辆使用数目&#xff1a;3&#xff0c;车辆行驶总距离&#xff1a;173.4115&#xff0c;违反约束路径数目&#xff1a;0&#xff0c;违反约束顾客数目&#xff1a;0

配送路线1&#xff1a;0->10->11->9->6->4->2->1->0
配送路线2&#xff1a;0->13->15->14->12->0
配送路线3&#xff1a;0->5->3->7->8->0
历时 17.533005 秒。


如需帮助请私聊
推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了Foundation框架中一些常用的结构体和类,包括表示范围作用的NSRange结构体的创建方式,处理几何图形的数据类型NSPoint和NSSize,以及由点和大小复合而成的矩形数据类型NSRect。同时还介绍了创建这些数据类型的方法,以及字符串类NSString的使用方法。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 本文介绍了如何使用n3-charts绘制以日期为x轴的数据,并提供了相应的代码示例。通过设置x轴的类型为日期,可以实现对日期数据的正确显示和处理。同时,还介绍了如何设置y轴的类型和其他相关参数。通过本文的学习,读者可以掌握使用n3-charts绘制日期数据的方法。 ... [详细]
author-avatar
台州路桥古筝音乐家教
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有